﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DIT.Domain;

namespace DIT.Contract
{
    public abstract class ITaxPayerService
    {
        protected IRepository repository;

        protected ITaxPayerService(IRepository repository)
        {
            if(repository == null)
                throw new ArgumentNullException("repository");
            this.repository = repository;
        }

        public abstract IEnumerable<KeyValuePair<EmployerCategoryENUM, string>> GetAllEmployerCategory();
        public abstract IEnumerable<KeyValuePair<StateCodeENUM, string>> GetAllState();
        public abstract IEnumerable<KeyValuePair<GenderENUM, string>> GetAllGender();
        public abstract Guid CreateTaxPayer(Account taxPayer);
        public abstract bool ModifyTaxPayer(Account taxPayer);
        public abstract void DeleteTaxPayer(Guid taxPayerId);
        public abstract Account GetClientById(Guid taxPayerId);
        public abstract Account GetClientByPAN(string pan);
        public abstract IEnumerable<Account> GetClientByLastName(string lastName);
        public abstract IEnumerable<Account> GetClientByMobile(ulong mobile);
        public abstract IEnumerable<Account> GetAllClient();
        public abstract IEnumerable<FilingStatus> GetFilingStatusByClient(Account client);
        public abstract FilingStatus GetFilingStatus(Account client, string assesmentYear);
        public abstract FilingStatus GetFilingStatusById(Guid filingStatusId);
        public abstract Guid CreateFilingStatus(FilingStatus filingStatus);
        public abstract bool ModifyFilingStatus(FilingStatus filingStatus);
    }
}
